﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SW2A311A
{
    static class Debug
    {
        internal static void Run()
        {

            Console.WriteLine("Programfunktioner testes - Tryk \"Enter\" for at starte");
            Console.ReadLine();

            #region Test af Product-klasser
            Console.WriteLine("Instantierer 3 emhætter, 3 mikroovne, 2 indbyggede ovne, 2  aftrækstørretumblere og 2 kondenstørretumbler");
            Hood a1 = new Hood("Electrolux", 7088, EHoodType.Frithængt, 660, 45, false);
            Hood a2 = new Hood("Gorenje", 2799, EHoodType.Indbygget, 614, 61, true);
            Hood a3 = new Hood("Siemens", 1989, EHoodType.Væghængt, 420, 45, true);

            MicrowaveOven b1 = new MicrowaveOven("Kenwood", 999, new Dimensions(50.5, 51.3, 30.5), 25, 0.8, false, true);
            MicrowaveOven b2 = new MicrowaveOven("Kenwood", 699, new Dimensions(36.7, 48.5, 29.6), 23, 0.5, true, false);
            MicrowaveOven b3 = new MicrowaveOven("Matsui", 399, new Dimensions(35.4, 44, 25.8), 17, 0.6, false, false);

            BuiltInOven c1 = new BuiltInOven("Gram", 3399, new Dimensions(59.5, 57.5, 59.5), 60, 1.2, false);
            c1.AddAccessorie("1 stk bradeplader");
            c1.AddAccessorie("2 stk bageplade");
            c1.AddAccessorie("Manual");
            c1.RemoveAccessorie("Manual");
            c1.AddAccessorie("Termometer");
            BuiltInOven c2 = new BuiltInOven("Miele", 12999, new Dimensions(59.9, 54.7, 57.9), 76, 0.89, true);
            c1.AddAccessorie("Alverdens tilbehør");

            VentingDryer d1 = new VentingDryer("Miele", 4790, new Dimensions(59.5, 58, 85), 6, 160, 0.67, 61, true);
            VentingDryer d2 = new VentingDryer("Hotpoint", 1999, new Dimensions(59.5, 57, 84.5), 7, 180, 4, 69, false);

            CondensingDryer e1 = new CondensingDryer("Candy", 2799, new Dimensions(60, 60, 85), 6, 210, 3.36, 64, false);
            CondensingDryer e2 = new CondensingDryer("AEG", 8999, new Dimensions(60, 60, 85), 8, 118, 4, 65, true);
            #endregion

            #region Test af Collectionklasse + events
            Console.WriteLine("\nTryk \"Enter\" for at oprette lagerliste og tilføje varer.");
            Console.ReadLine();

            StockCollection Elgiganten = new StockCollection(20
                , 20, 60, 35, 10);

            Elgiganten.Add(a1, 21);
            Elgiganten.Add(a2, 19);
            Elgiganten.Add(a3, 20);
            Elgiganten.Add(a3);
            Elgiganten.Add(d1, 20);
            Elgiganten.Add(d2, 20);
            Elgiganten.Add(e1, 20);
            Elgiganten.Add(e2, 15);
            Elgiganten.Add(b1, 50);
            Elgiganten.Add(b2, 40);
            Elgiganten.Add(b3, 30);
            Elgiganten.Add(c1, 5);
            Elgiganten.Add(c2, 20);


            Console.WriteLine("\nTryk \"Enter\" for at se lagerliste");
            Console.ReadLine();

            Elgiganten.PrintStockList();

            Console.WriteLine("\nTryk \"Enter\" for at fjerne varer fra lager");
            Console.ReadLine();

            try
            {
                Elgiganten.Remove(a1, 3);
                Elgiganten.Remove(a3);
                Elgiganten.Remove(d2, 19);
                Elgiganten.Remove(e1, 19);
                Elgiganten.Remove(b3, 18);
                Elgiganten.Remove(b2);
                Elgiganten.Remove(c1, 6); //Kan ikke lade sig gøre - der er kun 5
            }
            catch (ArgumentOutOfRangeException e)
            {
                Console.WriteLine("WARNING: Action aborted - " + e.Message);
            }
            #endregion

            #region Test af søgefunktioner
            #region Søg efter navn
            Console.WriteLine("\nTryk \"Enter\" for at se alle vare fra producenten \"Miele\"");
            Console.ReadLine();
            Elgiganten.FindMatchingProductsByName("Miele", true);
            #endregion

            #region Søg efter pris indenfor rækkevidde
            Console.WriteLine("\nTryk \"Enter\" for at se alle varer der koster mellem 500 og 1500 DKK");
            Console.ReadLine();
            Elgiganten.FindProductByPriceRange(new Range(500, 1500), true);
            #endregion

            #region Find tørretumblere med Energimærke
            Console.WriteLine("\nTryk \"Enter\" for at se alle tørretumblere med energimærke \"A\"");
            Console.ReadLine();
            Elgiganten.FindDryerByEnergyClass(EEnergyClass.A, true);
            #endregion

            #region Find alle varer med angivet smiley
            Console.WriteLine("\nTryk \"Enter\" for at se alle varer med \"neutral smiley\"");
            Console.ReadLine();
            Elgiganten.FindProductBySmileyRating(ESmiley.Neutral, true);
            #endregion
            #endregion

            #region Test af iteratorer

            #region Stigende baseret på pris
            Console.WriteLine("Tryk \"Enter\" for at printe en lagerliste sorteret stigende efter pris");
            Console.ReadLine();

            foreach (ProductCounter pc in Elgiganten.GetEnumeratorPriceAscending())
            {
                Console.WriteLine(pc.ToString());
            }
            #endregion

            #region Faldende baseret på pris
            Console.WriteLine("Tryk \"Enter\" for at printe en lagerliste sorteret faldende efter pris");
            Console.ReadLine();

            foreach (ProductCounter pc in Elgiganten.GetEnumeratorPriceDescending())
            {
                Console.WriteLine(pc.ToString());
            }
            #endregion
            #endregion

            Console.WriteLine(">>> Programmet er nu færdigt, og ved næste tryk på \"Enter\" lukkes det <<<");

        }
    }
}
